package greedy.跳跃游戏;


/**
 * 给你一个非负整数数组 nums ，你最初位于数组的 第一个下标 。数组中的每个元素代表你在该位置可以跳跃的最大长度。
 * <p>
 * 判断你是否能够到达最后一个下标，如果可以，返回 true ；否则，返回 false 。
 */
public class Solution {
    public boolean canJump(int[] nums) {
        int maxLen = nums[0];
        /**
         * 设置最大初始能到达的地方，扫描数组，如果当前位置所能到达的最大地方超过了，更新最大值，如果当前地方超过了所能到达的地方，直接返回false
         *
         */
        for (int i = 1; i < nums.length; i++) {
            if (i > maxLen) {
                return false;
            }
            maxLen = Math.max(maxLen, i + nums[i]);
            if (maxLen >= nums.length - 1) {
                return true;
            }
        }
        return false;
    }

    public static void main(String[] args) {
        System.out.println(new Solution().canJump(new int[]{1, 1, 2, 2, 0, 1, 1}));
    }
}
